# Agent代理分发类：
import importlib
import json
import os

from config import FileHandle
from llm.IntentRecognition import intentRecognition

tools_path = FileHandle.TOOLS_DIR


def use_agent(message, tool_ids, session_id):
    print("tools_path：" +tools_path)
    """
    从toolsConfig.json 文件中读取数据，找到和工具ID匹配的工具信息
    :param message: 用户输入的消息
    :param tool_ids: 工具ID列表
    :param session_id: 会话ID
    :return: 工具处理结果列表，每个元素为(result_params, tool)的元组
    """
    try:
        # 读取toolsConfig.json文件
        with open(FileHandle.TOOLS_CONFIG_PATH, 'r', encoding='utf-8') as f:
            data = json.load(f)

        # 存储所有匹配工具的结果
        results = []

        for toolId in tool_ids:
            agent_id = toolId
            # 遍历工具列表，找到匹配的工具ID
            for tool in data:
                if str(tool['id']) == agent_id:
                    # 找到匹配的工具ID，存储工具信息
                    print(f"找到匹配的工具ID: {toolId}")
                    print(f"工具信息: {tool}")

                    module_parameters = tool.get('parameters')
                    result_params = {}
                    if module_parameters:
                        # 如果有参数，调用意图识别方法
                        result_params = intentRecognition(message, module_parameters, session_id)
                    print("result_params:", result_params)
                    # 将结果参数和工具对象添加到结果列表
                    results.append((result_params, tool))
                    break
            else:
                print(f"未找到匹配的工具ID: {toolId}")
                
        if not results:
            print(f"未找到任何匹配的工具ID: {tool_ids}")
            return f"未找到匹配的工具ID: {tool_ids}"
            
        return results
            
    except Exception as e:
        print(f"工具处理过程发生错误: {str(e)}")
        return f"工具处理失败: {str(e)}"

def get_tool_Result(message,result_params,tool):
    # 获取工具方法
    tool_method = tool.get('method')
    if not tool_method:
        raise ValueError(f"工具 {tool['id']} 未定义处理方法")
    # 构建模块路径
    module_name = tool_method.replace('.py', '')  # 移除可能的.py后缀
    module_file = os.path.join(tools_path, f"{module_name}.py")
    # 检查文件是否存在
    if not os.path.exists(module_file):
        raise ValueError(f"工具模块文件不存在: {module_file}")

    # 构建模块导入路径
    import_path = f"uploads.tools.{module_name}"

    try:
        # 动态导入模块
        module = importlib.import_module(import_path)

        # 获取invoke方法
        if not hasattr(module, 'invoke'):
            raise ValueError(f"工具模块 {module_name} 中未找到 invoke 方法")

        method = getattr(module, 'invoke')

        # 调用方法处理消息
        result = method(message, tool, result_params)
        print("最后的结果：" + result)
        return result

    except ImportError as ie:
        print(f"导入模块失败: {str(ie)}")
        raise ValueError(f"无法导入工具模块: {module_name}")
